﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DataAccessLayer;
using System.Configuration;
using DTO;
using System.Data;

namespace DAL
{
    public class HinhAnhDAL
    {
        private DBManager _dbmanager;
        
        #region Phương thức khởi tạo
        /// <summary>
        /// Phương thức khởi tạo
        /// </summary>
        public HinhAnhDAL()
        {
            string _connectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, _connectionInfo);
        }
        #endregion

        #region Lay danh sach hinh anh 1 san pham theo mã sản phẩm

        public List<HinhAnhDTO> GetListHinhAnhMotSanPham(string masanpham)
        {

            List<HinhAnhDTO> _lstHA = new List<HinhAnhDTO>();
            IDataReader _readerHA = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@masanpham", masanpham);
                _readerHA = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListHinhAnhMotSanPHam");

                while (_readerHA.Read())
                {
                    HinhAnhDTO ha = new HinhAnhDTO();
                    ha.MaHinhAnh = (int)_readerHA["mahinhanh"];
                    ha.TenHinhAnh = Convert.ToString(_readerHA["tenhinhanh"]);
                    _lstHA.Add(ha);
                }

            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally
            {
                _readerHA.Close();
            }
            return _lstHA;
        }
        #endregion

        #region Phương thức tạo 1 hình ảnh từ Data Reader
        /// <summary>
        /// Phương thức tạo 1 hình ảnh từ Data Reader
        /// </summary>
        /// <param name="reader">IDataReader</param>
        /// <returns>HinhAnhDTO</returns>
        private HinhAnhDTO CreateHinhAnhFromReader(IDataReader reader)
        {
            HinhAnhDTO _haDTO = new HinhAnhDTO();
            _haDTO.MaHinhAnh = Convert.ToInt32(reader["MaHinhAnh"]);
            _haDTO.MaSanPham = Convert.ToString(reader["MaSanPham"]);
            _haDTO.TenHinhAnh = Convert.ToString(reader["TenHinhAnh"]);
            _haDTO.HaConfirm = Convert.ToInt32(reader["HaConfirm"]);
            return _haDTO;
        }
        #endregion

        #region Phương thức lấy danh sách hình ảnh
        /// <summary>
        /// Phương thức lấy danh sách hình ảnh
        /// </summary>
        /// <returns></returns>
        public List<HinhAnhDTO> GetListHinhAnh()
        {
            List<HinhAnhDTO> _lst = new List<HinhAnhDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListHinhAnh");
                while (_reader.Read())
                    _lst.Add(this.CreateHinhAnhFromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lst;
        }
        #endregion

        #region Comment
        /*
        public int DemHinhAnhTheoMaSanPham(string masp)
        {
            int dem = 0;
            try
            {
                dbmanager.Open();
                dbmanager.CreateParameters(1);
                dbmanager.AddParameters(0, "@ma_sp", masp);
                dem = Convert.ToInt32(dbmanager.ExecuteScalar(CommandType.StoredProcedure, "usp_DemHinhAnhTheoMaSanPham"));
                dbmanager.Close();
            }
            catch (Exception ex)
            {
                dbmanager.Close();
                throw new Exception(ex.Message);
            }
           
            return dem;
        }
         
        */
        #endregion

        #region Phương thức get hình ảnh dựa vào mã hình ảnh
        /// <summary>
        /// Phương thức get hình ảnh dựa vào mã hình ảnh
        /// </summary>
        /// <param name="maha"></param>
        /// <returns></returns>
        public HinhAnhDTO GetHinhAnh(int maha)
        {
            HinhAnhDTO _haDTO = new HinhAnhDTO();
            IDataReader reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_ha", maha);
                reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getHinhAnhTheoMaHinhAnh");
                while (reader.Read())
                    _haDTO = this.CreateHinhAnhFromReader(reader);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (reader != null)
                    reader.Close();
            }
            return _haDTO;
        }
        
        #endregion

        #region Phương thức get hình ảnh mặc định của 1 sản phẩm dựa vào mã sản phẩm
        /// <summary>
        /// Phương thức get hình ảnh mặc định của 1 sản phẩm dựa vào mã sả phẩm
        /// </summary>
        /// <param name="masp">string</param>
        /// <returns>HinhAnhDTO</returns>
        public HinhAnhDTO GetHinhAnhMacDinh(string masp)
        {
            HinhAnhDTO _ha = new HinhAnhDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_sp", masp);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getHinhAnhMacDinhTheoMaSanPham");
                while (_reader.Read())
                    _ha = this.CreateHinhAnhFromReader(_reader);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _ha;
        }

        #endregion

        #region Phương thức thêm 1 ảnh
        /// <summary>
        /// Phương thức thêm 1 ảnh
        /// </summary>
        /// <param name="nsp">HinhAnhDTO</param>
        /// <returns>string</returns>        

        //
        public int Them(HinhAnhDTO ha)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(3);
                _dbmanager.AddParameters(0, "@ma_sp", ha.MaSanPham);
                _dbmanager.AddParameters(1, "@ten_ha", ha.TenHinhAnh);
                _dbmanager.AddParameters(2, "@ha_confirm", ha.HaConfirm);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemHinhAnh");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
        }
        #endregion

        #region Phương thức sửa thông tin 1 hình ảnh
        /// <summary>
        /// Phương thức sửa thông tin 1 hình ảnh
        /// </summary>
        /// <param name="nsp">HinhAnhDTO</param>
        /// <returns>string</returns>
        public int Sua(HinhAnhDTO ha)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(4);
                _dbmanager.AddParameters(0, "@ma_ha", ha.MaHinhAnh);
                _dbmanager.AddParameters(1, "@ma_sp", ha.MaSanPham);
                _dbmanager.AddParameters(2, "@ten_ha", ha.TenHinhAnh);
                _dbmanager.AddParameters(3, "@ha_cf", ha.HaConfirm);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_CapNhatHinhAnh");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
        }
        #endregion

        #region Phương thức xóa 1 hình ảnh
        /// <summary>
        /// Phương thức xóa 1 hình ảnh
        /// </summary>
        /// <param name="ha">HinhAnhDTO</param>
        /// <returns>int</returns>
        public int Xoa(HinhAnhDTO ha)
        {
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_ha", ha.MaHinhAnh);
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_XoaHinhAnh");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // Đóng kết nối
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
        }
        #endregion

        #region Phương thức getCountAnh dựa theo mã sản phẩm
        /// <summary>
        /// Phương thức GetCountAnh dựa theo mã sản phẩm
        /// </summary>
        /// <param name="masp"></param>
        /// <returns></returns>
        public int GetCountAnh(string masp)
        {
            int _dem = 0;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_sp", masp);
                _dem = Convert.ToInt32(_dbmanager.ExecuteScalar(CommandType.StoredProcedure, "usp_getCountAnh"));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            // Đóng kết nối
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _dem;
        }
        #endregion

        #region Phương thức lấy danh sách hình ảnh từ 1 mã sản phẩm
        /// <summary>
        /// Phương thức lấy danh sách hình ảnh từ 1 mã sản phẩm
        /// </summary>
        /// <param name="masp">string</param>
        /// <returns>HinhAnhDTO</returns>
        public List<HinhAnhDTO> GetListHinhAnhTheoMaSanPham(string masp)
        {
            List<HinhAnhDTO> _lst = new List<HinhAnhDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_sp", masp);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListHinhAnhTheoMaSanPham");
                while (_reader.Read())
                    _lst.Add(this.CreateHinhAnhFromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lst;
        }
        #endregion
    }
}